/**
 * 
 */
Ext.Loader.setConfig({
			enabled : true
		});

Ext.Loader.setPath('Ext.ux', './js/ext4/ux');

Ext.require(['Ext.data.*', 'Ext.grid.*', 'Ext.tree.*', 'Ext.ux.TreePicker']);

Ext.define('Notice', {
			extend : 'Ext.data.Model',
			fields : [{
						name : 'id'
					}, {
						name : 'title'
					}, {
						name : 'content'
					}, {
						name : 'lasttime'
					}, {
						name : 'publishtime'
					}, {
						name : 'publisher'
					}, {
						name : 'status'
					}, {
						name : 'publishername'
					}]
		});

var store = Ext.create('Ext.data.Store', {
			model : 'Notice',
			pageSize : 20,
			proxy : {
				type : 'ajax',
				url : 'noticeAction!queryPage.action',
				reader : {
					type : 'json',
					root : 'pageList'
				}
			}
		});
function readTitle(data, cell, record, rowIndex, columnIndex, store) {
	var id = record.get('id');
	var title = data;
	var style = 'color:#15428b;cursor: pointer;font-weight:bold;';
	title = '<span style="' + style + '"  data="' + title
			+ '" onclick="openDetail(' + id + ')">' + title + '</span>';
	return title;
}
function openDetail(id) {
	Ext.util.Cookies.set('noticeid', id);
	window.top.Utils.addPage('noticeQuery' + id, '公告详情',
			'js/resources/business/notice/noticeQuery.js');
}
var cols = [{
			hidden : true,
			dataIndex : 'id'
		}, {
			text : '标题',
			sortable : true,
			renderer : readTitle,
			dataIndex : 'title',
			flex : 3
		}, {
			text : '发布人',
			sortable : true,
			dataIndex : 'publishername',
			renderer : function(v, m) {
				m.tdCls = 'red';
				return v;
			},
			flex : 1
		}, {
			text : '发布时间',
			sortable : true,
			dataIndex : 'publishtime',
			renderer : function(value) {
				if (value != '') {
					return value.replace('T', ' ');
				} else {
					return "未发布";
				}
			},
			flex : 1
		}, {
			text : '生成时间',
			sortable : true,
			dataIndex : 'lasttime',
			renderer : function(value) {
				if (value != '') {
					return value.replace('T', ' ');
				}
			},
			// renderer : Ext.util.Format.dateRenderer('Y-m-d'),
			flex : 1
		}, {
			text : '状态',
			sortable : true,
			dataIndex : 'status',
			flex : 1,
			renderer : function(v) {
				if (v == 1) {
					return '草稿';
				}
				if (v == 2) {
					return '已发布';
				}
			}
		}];
var addForm = Ext.create('Ext.form.Panel', {
			bodyPadding : 5,
			border : false,
			height : 350,
			width : 550,
			url : 'noticeAction!saveOrUpdate.action',
			defaults : {
				anchor : '100%'
			},
			items : [{
						layout : 'hbox',
						bodyStyle : 'padding:5px 5px',
						border : false,
						defaults : {
							border : false,
							xtype : 'panel',
							flex : 1,
							layout : 'anchor'
						}
					}, {
						xtype : 'hiddenfield',
						name : 'notice.id'
					}, {
						xtype : 'hiddenfield',
						name : 'notice.status'
					}, {
						xtype : 'textfield',
						fieldLabel : '公告标题<font color=red>*</font>',
						name : 'notice.title',
						width : 400,
						labelWidth : 60,
						emptyText : '请输入...',
						allowBlank : false,
						labelAlign : 'left'
					}, {
						id : 'contentEditor1',
						fieldLabel : '内容',
						xtype : 'ueditor',
						labelWidth : 60,
						name : 'notice.content',
						width : '100%',
						height : 260
					}]
		});

var addWin = Ext.create('Ext.window.Window', {
			title : '新增',
			autoScroll : true,
			constrain : true,
			height : 412,
			width : 580,
			modal : true,
			closeAction : 'hide',
			closable : true,
			items : [addForm],
			buttonAlign : 'center',
			listeners : {
				show : function() {
					addForm.getForm().reset();
				}
			},
			buttons : [{
						text : '直接发布',
						handler : function() {
							var contentEditor1 = Ext.getCmp('contentEditor1');
							if (contentEditor1.getValue().length > 3000) {
								Ext.Msg
										.alert('提示',
												'文章内容字符过长,已超出3000字符请修改后提交！');
								return;
							}
							addForm.getForm().findField('notice.status')
									.setValue(2);
							addForm.submit({
										submitEmptyText : false,
										success : function(form, action) {
											msg = '保存并发布成功！';
											Ext.Msg.show({
														title : '提示',
														msg : msg,
														buttons : Ext.Msg.OK,
														width : 300,
														fn : function() {
															store.reload();
														}
													});

										},
										failure : function(form, action) {
											Ext.Msg.alert('Failed', '保存失败！');
										}
									});
							addWin.hide();
						}
					}, {
						text : '保存为草稿',
						handler : function() {
							var contentEditor1 = Ext.getCmp('contentEditor1');
							if (contentEditor1.getValue().length > 3000) {
								Ext.Msg
										.alert('提示',
												'文章内容字符过长,已超出3000字符请修改后提交！');
								return;
							}
							addForm.getForm().findField('notice.status')
									.setValue(1);
							addForm.submit({
										submitEmptyText : false,
										success : function(form, action) {
											msg = '保存成功！';
											Ext.Msg.show({
														title : '提示',
														msg : msg,
														buttons : Ext.Msg.OK,
														width : 300,
														fn : function() {
															store.reload();
														}
													});

										},
										failure : function(form, action) {
											Ext.Msg.alert('Failed', '保存失败！');
										}
									});
							addWin.hide();
						}
					}, {
						text : '取消',
						handler : function() {
							addWin.close();
						}
					}]
		});
var addBtn = {
	xtype : 'button',
	text : '新增',
	name : 'add',
	width : 50,
	iconCls : 'icon-add',
	// hidden : true,
	handler : function() {
		window.top.Utils.addPage('noticeAdd', '公告新增',
				'js/resources/business/notice/noticeAdd.js');
	}
};

var editBtn = {
	xtype : 'button',
	text : '修改',
	// hidden : true,
	iconCls : 'icon-edit',
	handler : function() {
		var selMode = grid.getSelectionModel();
		var model = selMode.getSelection();
		var raw = model[0].raw;
		var status1 = raw.status;
		if (model.length == 1) {
			Ext.util.Cookies.set('noticeId', raw.id);
			Ext.util.Cookies.set('flag', 'edit');
			window.top.Utils.addPage('noticeEdit' + raw.id, '公告修改',
					'js/resources/business/notice/noticeAdd.js');
		} else if (model.length > 1) {
			Ext.Msg.alert('提示', '只能选择一条修改！');
			return;
		} else {
			return;
		}

	}
};
var deleteBtn = {
	xtype : 'button',
	text : '删除',
	iconCls : 'icon-delete',
	// hidden : true,
	handler : function() {
		var selMode = grid.getSelectionModel();
		var model = selMode.getSelection();
		if (model[0]) {
			var ids = [];// 删除多个
			Ext.Array.each(model, function(item) {
				// if (item.raw.status != 1) {
				// Ext.Msg.alert('提示', '您选择的数据中存在非草稿状态数据，请重新选择！');
				// ids = [];
				// return false;
				// } else {
				ids.push(item.raw.id);
					// }
				});
			if (ids.length == 0) {
				return;
			} else {
				Ext.Msg.show({
							title : '确认删除',
							buttons : Ext.MessageBox.OKCANCEL,
							msg : '确定删除选择项?',
							fn : function(btn) {
								if (btn == 'ok') {
									Ext.Ajax.request({
												url : 'noticeAction!delete.action?ids='
														+ ids,
												success : function(response) {
													Ext.Msg.show({
																title : '提示',
																msg : '删除成功！',
																buttons : Ext.Msg.OK,
																width : 300,
																fn : function() {
																	store
																			.reload();
																}
															});
												},
												failure : function(response,
														opts) {
												}
											});
								}
							}
						});
			}
		}
	}
};

var publishBtn = {
	xtype : 'button',
	text : '发布',
	iconCls : 'icon-application_go',
	// hidden : true,
	handler : function() {
		var selMode = grid.getSelectionModel();
		var model = selMode.getSelection();

		if (model.length == 0) {
			Ext.Msg.alert('提示', '请选择要发布的公告！');
		}
		if (model[0]) {
			var ids = [];
			Ext.Array.each(model, function(item) {
						if (item.raw.status != 1) {
							Ext.Msg.alert('提示', '您选择的数据中存在已发布状态数据，请重新选择！');
							ids = [];
							return false;
						} else {
							ids.push(item.raw.id);
						}
					});
			if (ids.length == 0) {
				return;
			} else {
				Ext.Msg.show({
					title : '确认发布',
					buttons : Ext.MessageBox.OKCANCEL,
					msg : '确定发布公告?',
					fn : function(btn) {
						if (btn == 'ok') {
							Ext.Ajax.request({
										url : 'noticeAction!publish.action?ids='
												+ ids,
										success : function(response) {
											Ext.Msg.show({
														title : '提示',
														msg : '发布成功！',
														buttons : Ext.Msg.OK,
														width : 300,
														fn : function() {
															store.reload();
														}
													});
										},
										failure : function(response, opts) {
										}
									});
						}
					}
				});
			}
		}
	}
};

var searchTitle = new Ext.form.TextField({
			fieldLabel : '公告标题',
			labelWidth : 70,
			id : "searchTitle",
			// hidden:true,
			emptyText : '请输入...'
		});
var begin = new Ext.form.DateField({
			fieldLabel : '发布时间',
			labelWidth : 60,
			id : 'begin',
			emptyText : '请选择...',
			format : 'Y-m-d',
			editable : false,
			vtype : 'daterange',// daterange类型为上代码定义的类型
			endDateField : 'end',// 必须跟endDate的id名相同
			onTriggerClick : function() {
				var dt1 = this;
				Ext.form.DateField.prototype.onTriggerClick.apply(dt1,
						arguments);
				if (Ext.isEmpty(dt1.clearBtn)) {
					this.clearBtn = new Ext.Button({
								text : '清除',
								handler : function() {
									dt1.setValue("");
									dt1.picker.hide();
									dt1.collapse();
								}
							});
					dt1.clearBtn.render(dt1.picker.todayBtn.container);
				}
			}
		});
var end = new Ext.form.DateField({
			fieldLabel : '至',
			labelSeparator : '',
			id : 'end',
			labelWidth : 30,
			emptyText : '请选择...',
			format : 'Y-m-d',
			editable : false,
			vtype : 'daterange',// daterange类型为上代码定义的类型
			endDateField : 'begin',// 必须跟endDate的id名相同
			onTriggerClick : function() {
				var dt1 = this;
				Ext.form.DateField.prototype.onTriggerClick.apply(dt1,
						arguments);
				if (Ext.isEmpty(dt1.clearBtn)) {
					this.clearBtn = new Ext.Button({
								text : '清除',
								handler : function() {
									dt1.setValue("");
									dt1.picker.hide();
									dt1.collapse();
								}
							});
					dt1.clearBtn.render(dt1.picker.todayBtn.container);
				}
			}
		});
var searchBtn = {
	xtype : 'button',
	text : '搜索',
	iconCls : 'icon-search',
	// hidden : true,
	handler : function() {
		var proxy = store.getProxy();
		var b1 = begin.getValue();
		var b2 = end.getValue();
		if (b1 != null && b2 != null) {
			if (b1 > b2) {
				Ext.Msg.alert('提示', "使用日期开始日期大于结束日期");
				return;
			}
		}
		var searchBegin;
		var searchEnd;
		if (begin.getValue() != null) {
			searchBegin = begin.getValue().Format("yyyy-MM-dd"); // 起始时间
		}
		if (end.getValue() != null) {
			searchEnd = end.getValue().Format("yyyy-MM-dd"); // 截止时间
		}
		proxy.extraParams = {
			"title" : searchTitle.getValue(),
			"beginDate" : searchBegin,
			"endDate" : searchEnd
		};
		store.reload();
	}
};
var grid = Ext.create('Ext.grid.Panel', {
			store : store,
			border : 0,
			selModel : Ext.create('Ext.selection.CheckboxModel'),
			columns : cols,
			stripeRows : true,
			dockedItems : [{
						xtype : 'toolbar',
						dock : 'top',
						items : [begin, end, searchTitle, searchBtn]
					}],
			tbar : [addBtn, editBtn, publishBtn, deleteBtn],
			bbar : Ext.create('Ext.PagingToolbar', {
						pageSize : 20,// 每页20条
						store : store,
						displayInfo : true,
						plugins : Ext.create('Ext.ux.ProgressBarPager', {})
					})
		});

function ExternalRefresh() {
	var proxy = store.getProxy();
	var searchBegin = null;
	var searchEnd = null;
	if (begin.getValue() != null) {
		searchBegin = begin.getValue().Format("yyyy-MM-dd"); // 起始时间
	}
	if (end.getValue() != null) {
		searchEnd = end.getValue().Format("yyyy-MM-dd"); // 截止时间
	}
	proxy.extraParams = {
		"title" : searchTitle.getValue(),
		"beginDate" : searchBegin,
		"endDate" : searchEnd
	};
	store.reload();
};
Ext.onReady(function() {
			Ext.create('Ext.container.Viewport', {
						layout : 'fit',
						border : false,
						layout : {
							type : 'hbox',
							align : 'stretch'
						},
						items : [{
									flex : 5,
									layout : 'fit',
									border : false,
									items : [grid]
								}]
					});
			store.load();
		});